<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

require_once(BASE_DIR.'page.class.php');
require_once(INCLUDES_DIR.'answer_page.class.php');
require_once(INCLUDES_DIR.'edit_page.class.php');
require_once(INCLUDES_DIR.'category_page.class.php');
require_once(INCLUDES_DIR.'view_question_page.class.php');
require_once(INCLUDES_DIR.'give_question_page.class.php');
require_once(INCLUDES_DIR.'entrance_page.class.php');
require_once(INCLUDES_DIR.'register_page.class.php');
require_once(INCLUDES_DIR.'about_page.class.php');
require_once(INCLUDES_DIR.'setting_page.class.php');

require_once(BASE_DIR.'search.class.php');
require_once(INCLUDES_DIR.'search_question.class.php');

/*!
 * @page MainPagePage Исходный код класса MainPage
 * @include main_page.class.php
 */

/*! @addtogroup ClassWebFormsQA Основные классы проекта
 *  Группа включает основные классы используемые в проекте WebFormsQA
 *  @{
 */


/**
 * @class MainPage 
 * @brief Класс главной страницы, содержащей все остальные \n
 * @ref MainPagePage  
 * 
 */
class MainPage extends Page {

    /**
     * массив обьектов страниц, которые принадлежат главной странице
     * @var array $sub_page
     */
    var $sub_page  = array();


    /** путь по которому храняться шаблоны страниц 
     * @var string $path_template 
     */
    var $path_template;

    /**
     *  конструктор.
     *  
     *  	в конструкторе создаются следующие страницы:
     * - страница проверки зарегистрированного пользователя
     * - регистрация нового пользовател
     * - Добавление нового вопроса пользователем
     * - Добавление ответа на вопрос пользователя
     * - Редактирование уже имеющихся вопросов (вопросы может редактировать пользователь с административными правами)
     * - Добавление новой категории (добавлять новую категорию может пользователь с административными правами)
     * - Вывод информации о проекте
     *  
     *  @param object &$smarty_obj   - ссылка на обьект шаблона
     *  @param array  $attr          - массив атрибутов в формате attr["name"] = name_type;
     *  @param string $path          - путь к шаблону библиотеки Smarty
     *  @param string $name_template - название шаблона
     */
    function MainPage(&$smarty_obj, $attr, $path, $name_template)
    {
        $this->path_template = $path;
        parent::Page($smarty_obj, $attr, $name_template);
        
        // страница: страница проверки зарегистрированного пользователя
        //           атрибуты страницы
        $attributes = array(
            'entrance_page' => 'string',
            'first'         => 'string',
            'second'        => 'string',
            'exit'          => 'string',
            'update'        => 'string'
        );

        $this->sub_page[] = new EntrancePage($smarty_obj, $attributes, 'entrance.tpl.html');

        // страница: регистрация нового пользовател
        //           атрибут страницы
        $attributes = array(
            'register_page' => 'string',
            'first'         => 'string',
            'second'        => 'string',
            'email'         => 'string',
            'admin_first'   => 'string',
            'admin_second'  => 'string',
            'code'          => 'string'
         );
        $this->sub_page[] = new RegisterPage($smarty_obj, $attributes, 'register.tpl.html');

        
        
        // страница: Добавление нового вопроса пользователем
        $attributes = array(
            'give_question_page'=> 'string',       // переход на страницу
            'categoryID'     	=> 'integer',      // идентификатор категории, берется из базы
            'question'       	=> 'string',       // строка - заданный вопрос
            'email'          	=> 'string',       // электронный адрес пользователя - может отсутствовать
            'image_code'        => 'string'        // строка подтверждения, для предотвращения спама       
         );

        $this->sub_page[] 	= new GiveQuestionPage($smarty_obj, $attributes, 'give_question.tpl.html');

        // страница: Добавление ответа на вопрос пользователя
        $attributes = array(
            'answer_page'    => 'string',       // переход на страницу
            'categoryID'     => 'integer',      // идентификатор категории, берется из базы
            'change'         => 'string',       // нажали кнопку изменить категорию
            'delete'         => 'string',       // нажали кнопку удалить вопрос(ы)
            'offset'         => 'integer',      // смещение для навигатора
            'questionID'     => 'integer',      // идентификатор выбранного вопроса
            'but_answer'     => 'string',       // нажали кнопку ответить на вопрос
            'answer'         => 'string'        // строка с ответом
         );

        $this->sub_page[] = new AnswerPage($smarty_obj, $attributes, 'answer.tpl.html');

        // страница: Редактирование уже имеющихся вопросов (вопросы может редактировать пользователь с административными правами)
        $attributes = array(
            'edit_page'      => 'string',       // переход на страницу
            'categoryID'     => 'integer',      // идентификатор категории, берется из базы
            'offset'         => 'integer',      // смещение для навигатора
            'questionID'     => 'integer',      // идентификатор выбранного вопроса
            'but_answer'     => 'string',       // нажали кнопку изменить ответ
			'but_delete'     => 'string',       // нажали кнопку удалить вопрос
            'answer'         => 'string'        // строка с ответом
         );

        $this->sub_page[] = new EditPage($smarty_obj, $attributes, 'edit.tpl.html');

        // страница: Добавление новой категории (добавлять новую категорию может пользователь с административными правами)
        $attributes = array(
            'category_page'	 => 'string',       // переход на страницу
            'categoryID'     => 'integer',      // идентификатор категории, берется из базы
            'ref_add'        => 'string',       // нажали ссылку добавить категорию
            'ref_del'        => 'string',       // нажали ссылку удалить категорию (со всеми вопросами)
            'category'       => 'string',       // название новой категории
            'but_category'   => 'string'     	// нажали кнопку добавить новую категорию с отправкой названия
         );

        $this->sub_page[] = new CategoryPage($smarty_obj, $attributes, 'category.tpl.html');

        
        // страница: Вывод информации о проекте
        $attributes = array(
            'about_page'	 => 'string'       // переход на страницу
         );

         $this->sub_page[] = new AboutPage($smarty_obj, $attributes, 'about.tpl.html');
         
        // страница: страница для отображения вопросов в выбранной категории
        $attributes = array(
            'view_question_page'=> 'string',   	// переход на страницу
            'categoryID'     	=> 'integer',   // идентификатор категории, берется из базы
            'offset'         	=> 'integer',   // смещение для навигатора
        	'find_field'		=> 'string',	// строка поиска
        	'mode_search'		=> 'integer',	// режим поиска, поиск вопросов, поиск ответов, и там и там
        	'questionID'		=> 'integer',	// номер выбранного вопроса
        	'display_only_question' => 'integer'// признак отображения только вопросов, без ответов
         );

        $view_question 		= new ViewQuestionPage($smarty_obj, $attributes, 'view_question.tpl.html');
        $this->sub_page[] 	= $view_question;
        
        // указываю, что страница является страницей выполняемой по умолчанию 
        $view_question->setDefault( true );


        // страница: страница редактирывания пользовательской информации
        //           атрибуты страницы
        $attributes = array(
            'setting_page'  		=> 'string',		// переход на страницу
			'second_old'  			=> 'string',		// текущий пароль 
            'second'    			=> 'string',		// новый пароль
            'second_repeat' 		=> 'string',		// подтверждение пароля 
			'email'     			=> 'string',		// новый email
			'admin_first'			=> 'string',		// имя администратора
			'admin_second'			=> 'string',		// пароль администратора для добавления административных прав
			'admin_second_repeat'   => 'string',		// подтверждение пароля администратора
			'push_choice_setting'	=> 'string',		// признак нажатия кнопки "Изменить настройки"
            'exit'          		=> 'string'
        );

        $this->sub_page[] = new SettingPage($smarty_obj, $attributes, 'setting.tpl.html');


    } // конструктор




    /** 
     * @brief обновить данные страницы 
     */
    function update()
    {
        // шаблон по умолчанию
        $this->Smarty->template_dir = $this->path_template;
        $this->Smarty->assign("main_content_template", $this->name_template);

        
        // отображение формы ввода логина и пароля
        $this->Smarty->assign("display_entrance", true);
        // признак авторизации пользователя
        $this->Smarty->assign("authorization", false);
        // имя авторизованного пользователя
        $this->Smarty->assign("authorization_user", DEFAULT_USER);


        // обновляем атрибуты главной страницы
        parent::update();
        
        $flag_update = false;
        // отображение всех подстраниц
        foreach ($this->sub_page as $curr) {
        	if( $curr->update() ) {
        		$flag_update = true;
        	}
        }
        
        // проверяю возможность перехода на страницу по умолчанию 
        if( !$flag_update ) {
        	foreach ($this->sub_page as $curr) $curr->updateDefault();
        }
        

        $tabs_title = WEBFORMSQA_NAME;
        $tabs_info[] = array("id" => ID_PAGE_VIEW_QUESTION, "name" => TAB_VIEW_QUESTION, "code_page" => "index.php?view_question_page");
        $tabs_info[] = array("id" => ID_PAGE_GIVE_QUESTION, "name" => TAB_GIVE_QUESTION, "code_page" => "index.php?give_question_page");
    	
        //*****************************************************************************************
        //  проверка авторизация ПОЛЬЗОВАТЕЛЯ производится после вызова логики обновления страниц  
        //*****************************************************************************************
        $flag_admin = false;
        if( AuthCommon::checkAuthUser(&$flag_admin) ) {
        	// проверяю авторизацию пользователя
        	$this->Smarty->assign("display_entrance", false);
        	$this->Smarty->assign("authorization", true );
        	$this->Smarty->assign("authorization_user", $_SESSION["authorization_user"]);
        	
        	if( $flag_admin ) {
				$tabs_info[] = array("id" => ID_PAGE_ANSWER, "name" => TAB_ANSWER, "code_page" => "index.php?answer_page");
			    $tabs_info[] = array("id" => ID_PAGE_EDIT, "name" => TAB_EDIT, "code_page" => "index.php?edit_page");
			    $tabs_info[] = array("id" => ID_PAGE_CATEGORY, "name" => TAB_CATEGORY, "code_page" => "index.php?category_page");
			}
        }
        
        
        $tabs_info[] = array("id" => ID_PAGE_ABOUT_PROJECT, "name" => TAB_ABOUT_PROJECT, "code_page" => "index.php?about_page");
        $tabs_info[] = array("id" => ID_PAGE_DOC_PROJECT,   "name" => TAB_DOC_PROJECT, "code_page"   => "doc/html");
        
        
        
        // общая информация для всех вкладок
        $this->Smarty->assign('tabs_info', $tabs_info);
        $this->Smarty->assign('tabs_title',$tabs_title);
        $this->Smarty->assign('tabs_info_count', sizeof($tabs_info));
       
        
        
        
        if (!defined('TEST_PROJECT')) {
            // отобразить данные, вызов обязательно должен быть самым последним
            $this->Smarty->display($this->path_template."index.tpl.html");
        }
    } // end update()

}  // finish class Page

/*! @} */

?>
